package com.shujia.day08;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo01Collection {
    public static void main(String[] args) {
        /*
            TODO 集合
                之前的代码操作都是一个变量对应一个数据，如果遇到大批量数据要进行处理，那么
                    可以使用数组对其进行操作，数组在定义时，其长度有限，并且数组提供的方法也是有限的
                        对于特殊场景下的应用不是很方便：
                            对于对象数据据进行排序 ？
                            以及对重复数据进行去重 ？
                            以及存储对应的 Key Value 数据？
                    所以提出了有集合概念，为一个容器，专门提供了一些类，为大批量数据存储提供对应的对象方法
                    集合类有哪些？ 对应方法的功能如何使用
         */

        /*
            TODO 查看顶级父接口 Collection 的方法
                1.add
                    用于添加一个Object子类的元素，其中对于基本数据类型并不是 Object子类 但是可以添加
                2.toArray
                3.remove
                4.clear


                <>:表示泛型，用于限制当前集合存储数据的类型，暂时可以不用给定
                对于数据相关的类，一般先做增删改查，之后再看其特殊方法
                对于Collection并没有提供针对单个元素的获取以及修改方法？
                    对于不同的子实现类，其特性不一样  比如 List 和 Set 来说  List有序，Set是无序
                        那么Set不能通过其下标去取数据，Collection 仅仅是一个接口，具体实现要看其子实现对象

         */

        Collection collection = new ArrayList();
        collection.add("1");
        collection.add(1);
        collection.add(true);
        int i = 2;
        collection.add(i); // 对基本数据类型进行自动装箱 包装成 Integer
        System.out.println(collection);

        /*
            collection 提供的方法可以获取其数据
         */
        collection.iterator();
        System.out.println(collection.toArray()[0]);
        for (Object o : collection) {
            System.out.println(o);
        }

        /*
            删除数据
         */
//        collection.remove(true);
//        System.out.println(collection);
//        collection.clear();
//        System.out.println(collection);


        /*
            TODO 通过Collection获取其迭代器
                     迭代器是用于遍历数据的一种容器  迭代器维护了一个指针，其指针一开始位置在集合之前
                 其提供的方法：
                    hasNext:查看当前位置是否存在数据
                    next: 获取下一个位置的数据  将当前指针移动下一个，然后返回当前指针指向的数据


         */
        System.out.println("=======Iterator=========");
        Iterator iterator = collection.iterator();
//        System.out.println(iterator.hasNext()); // true
//        System.out.println(iterator.next()); //  1
//        System.out.println(iterator.hasNext()); // true
//        System.out.println(iterator.next()); //1
//        System.out.println(iterator.hasNext()); // true
//        System.out.println(iterator.next()); // true
//        System.out.println(iterator.hasNext());// true
//        System.out.println(iterator.next()); // 2
//        System.out.println(iterator.hasNext()); // false
//        System.out.println(iterator.next()); // java.util.NoSuchElementException
//
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

        // iterator中的指针是全局唯一的，数据只能遍历一次
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }


        /*
            其他方法 所有的
         */
        System.out.println(collection.contains(true));
        System.out.println(collection.size());
        System.out.println(collection.isEmpty());
//        Iterator iterator2 = collection.iterator();  // 所有的iterator都是统一的指针 但是对于collection是单独的
//        while (iterator2.hasNext()){
//            System.out.println("2:"+iterator.next());
//        }
        System.out.println(collection);

        /*
            TODO 对多个集合进行操作
         */
        Collection collection2 = new ArrayList();
        collection2.add("11");
        collection2.add("22");
        collection2.add("33");

        collection2.addAll(collection);
        System.out.println(collection2);

        // 删除所有交集的数据
        collection.add("44");
        collection2.removeAll(collection);
        System.out.println(collection2);

        // 是否全部包含
        System.out.println(collection2.containsAll(collection));
        // true
        System.out.println(collection2.retainAll(collection));




    }
}
